package com.xtm.exercise.base.A05Date;

import com.alibaba.fastjson.JSON;
import com.xtm.exercise.utils.DateUtils;
import org.junit.Test;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class DateDemo {

    /**
     * java获取当前系统时间
     */
    @Test
    public void test07(){
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        // 获取以毫秒为单位的当前时间  实际上，currentTimeMillis方法就是 获取当前系统时间与1970年01月01日00:00点之间的毫秒差值
        long currentTimeMillis = System.currentTimeMillis();//1653197544804 // TODO 开发常用   毫秒值  返回以毫秒为单位的当前时间
        String currentTimeDate = format.format(currentTimeMillis);//2022-05-22 13:32:24

        // data 方式不推荐使用了， 推荐使用 LocalDateTime 线程安全
        Date date = new Date();//Sun May 22 13:25:36 CST 2022
        //获取时间戳
        long time = date.getTime();//3742777636267
        //传递毫秒值,把毫秒值转换为Date日期
        date = new Date(3742767540068L);// Sun Aug 08 09:39:00 CST 2088
        String saveTime = format.format(date);//2022-05-22 13:25:36
        String formatDate = JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd HH:mm:ss");// "2019-08-14 11:06:06"
    }

    /**
     * 键盘输入指定格式(yyyy-MM-dd)的任意日期,显示出对应的是星期几.
     */
    @Test
    public void test04(){
        //键盘录入日期字符串
//        Scanner sc  =   new Scanner(System.in);
//        System.out.println("请输入日期  格式(yyyy-MM-dd) :");
//        String date  = sc.nextLine();
        String date  = "2019-09-05";
        // 创建格式化日期对象,解析字符串为date
        SimpleDateFormat sdf  = new SimpleDateFormat("yyyy-MM-dd");
        Date parse = null;
        try {
            parse = sdf.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        //创建格式化日期对象,显示date对象的星期
        SimpleDateFormat sdf2 = new SimpleDateFormat("E");
        String week = sdf2.format(parse);
        System.out.println(week);
    }

    /**
     * 分别用几种不同的格式输出当前日期.格式参考如下:
     * 格式一: 2010/10/10 22:22:22
     *  	格式二: 2010年10月10日  第xx天
     *  	格式三: 2010.10.10 星期日
     */
    @Test
    public void test05(){
        Date date = new Date();
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年 MM月 dd日 第 D天");
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy.MM.dd E");

        System.out.println(sdf1.format(date));
        System.out.println(sdf2.format(date));
        System.out.println(sdf3.format(date));
    }

    /**
     * 获取指定某年某月份的第一天  获取指定某年某月份的最后一天
     */
    @Test
    public void test06(){
        String firstDayOfMonth = DateUtils.getFirstDayOfMonth("2020-04");
        System.out.println(firstDayOfMonth);
        String lastDayOfMonth = DateUtils.getLastDayOfMonth("2020-04");
        System.out.println(lastDayOfMonth);
    }

}


